package com.tech.mapper;

import com.tech.repository.entity.Order;

import java.util.List;
import java.util.TreeMap;


public interface OrderDao {
	/**
	 * 通过ID查找订单
	 *
	 * @param id 要查找订单的所属ID
	 * @return 找到就返回，否则返回null
	 */
	Order getOrder(int id);

	/**
	 * 根据买家ID和卖家ID查询订单
	 *
	 * @param buyerId  买家ID
	 * @param sellerId 卖家ID
	 * @return 订单，如果不存在返回null
	 */
	Order getOrder(int buyerId, int sellerId);

	/**
	 * 获取指定用户的所有订单
	 *
	 * @return 该用户的订单列表
	 */
	List<Order> getUserOrders(int userId);

	/**
	 * 获取所有订单
	 *
	 * @return 所有订单信息，键为用户ID，值为订单
	 */
	TreeMap<Integer, List<Order>> getAllOrders();

	/**
	 * 添加新的订单信息
	 *
	 * @param order 新的订单信息
	 * @return 新订单所属ID
	 */
	int addOrder(Order order);

	/**
	 * 添加新的订单信息
	 *
	 * @param orderList 订单列表
	 * @return 影响的行数
	 */
	int[] addOrders(List<Order> orderList);

	/**
	 * 更新订单状态
	 *
	 * @param orderId    订单ID
	 * @param orderState 新的订单状态
	 * @return 修改是否成功
	 */
	boolean updateOrderState(int orderId, Order.OrderState orderState);

	/**
	 * 根据ID删除指定订单
	 *
	 * @param id 要删除订单的ID
	 * @return 是否删除成功，不存在时返回false
	 */
	boolean delOrder(int id);

	/**
	 * 删除指定用户的所有订单
	 *
	 * @param userId 用户ID
	 * @return 影响的行数
	 */
	int delUserOrder(int userId);

	/**
	 * 根据ID批量删除订单
	 *
	 * @param ordersList 要删除订单的ID列表
	 * @return 影响到的行数
	 */
	int[] delOrders(List<Integer> ordersList);

	/**
	 * 删除所有订单
	 *
	 * @return 如果订单数据改变就返回true
	 */
	boolean delAllOrders();

	boolean updateOrder(int orderId, Order newOrder);

	boolean updateOrderState(int orderId, String newState);

}
